/*
 * 版权所有 (C) 2015 知启蒙(ZHIQIM) 保留所有权利。[遇见知启蒙，邂逅框架梦]
 * 
 * https://zhiqim.org/project/zhiqim_framework/zhiqim_kernel.htm
 *
 * Zhiqim Kernel is licensed under Mulan PSL v2.
 * You can use this software according to the terms and conditions of the Mulan PSL v2.
 * You may obtain a copy of Mulan PSL v2 at:
 *          http://license.coscl.org.cn/MulanPSL2
 * THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
 * EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
 * MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
 * See the Mulan PSL v2 for more details.
 */
package org.zhiqim.kernel.control;

/**
 * 队列锁，通常运行于（生产-消费）多线程（运用对象中wait和notify方法转化为队列的锁定状态<br><br>
 * 1、锁定时同步，忽略异常
 * 2、解锁时同步，并通知全部队列中的线程
 * 
 * @version v1.0.0 @author zouzhigang 2014-2-27 新建与整理
 */
public final class QueueLock
{
    /**
     * 消费者线程调用，锁定当前线程，等待生产者线程通知或等待时间结束自动唤醒
     * 
     * @param timeout 等待时间，单位毫秒
     */
    public synchronized void lock(long timeout)
    {
        try{wait(timeout);}catch (Throwable e){}
    }

    /** 生产者线程调用，通知正在等待的某个消费者线程结束阻塞线程 */
    public synchronized void unlock()
    {
        notify();
    }
    
    /** 生产者线程调用，通知正在等待的所有消费者线程结束阻塞线程 */
    public synchronized void unlockAll()
    {
        notifyAll();
    }
}